import Vue from 'vue';
import NotifyComponent from '';

const NotifyConstructor = Vue.extend(NotifyComponent); // 生成组件构造器
let currentNotify = null; // 记录当前显示的notify（确保同时只有一个）

const Notify = (options = {}) => {
  // 若已有notify，先隐藏它
  if (currentNotify) {
    currentNotify.visible = false;
  }

  // 处理简化调用：支持直接传字符串作为message
  const opts = typeof options === 'string'
    ? { message: options }
    : options;

  // 实例化组件并传入配置
  currentNotify = new NotifyConstructor({
    data: opts
  });

  currentNotify.$mount(); // 手动挂载组件（无DOM容器时需此操作）
  document.body.appendChild(currentNotify.$el); // 将组件添加到body

  // 下一帧再显示（确保DOM已挂载，动画生效）
  Vue.nextTick(() => {
    currentNotify.visible = true;
  });

  return currentNotify; // 返回实例，可手动控制
};

// 为不同类型添加快捷方法（如 this.$notify.success()）
['primary', 'success', 'danger', 'warning'].forEach(type => {
  Notify[type] = (message, options = {}) => {
    return Notify({
      ...options,
      type,
      message
    });
  };
});

// 注册为Vue原型方法，实现全局调用
Vue.prototype.$notify = Notify;

export default Notify;